package pers.qianyu.module.image.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import pers.qianyu.module.core.comm.Pagination;
import pers.qianyu.module.core.domain.image.dto.ImageDTO;
import pers.qianyu.module.core.domain.image.entity.ImagePO;
import pers.qianyu.module.core.domain.image.query.FollowedUserImageQuery;
import pers.qianyu.module.core.domain.image.query.ImageQuery;
import pers.qianyu.module.core.domain.image.query.KeywordsQuery;
import pers.qianyu.module.core.domain.image.vo.ImageVO;

import java.util.List;

/**
 * @author mizzle rain
 * @date 2020-11-05 15:29
 */
public interface ImageService {
    /**
     * 插入图片
     *
     * @param imageDTO 图片信息
     */
    Long insImage(ImageDTO imageDTO);

    /**
     * 根据id更新图片
     *
     * @param id       图片id
     * @param imageDTO 图片信息
     */
    void updImage(Long id, ImageDTO imageDTO);

    /**
     * 查询图片信息
     *
     * @param imageQuery 查询条件
     */
    Pagination<ImageVO> queryImage(ImageQuery imageQuery);

    /**
     * 根据id查询图片
     *
     * @param id 图片 id
     * @return 图片信息
     */
    ImageVO queryById(Long id);

    /**
     * 根据 id 删除图片
     *
     * @param id 图片 id
     */
    void delImage(Long id);

    /**
     * 增加评论数
     *
     * @param id    要操作的图片
     * @param count 增量
     */
    void addComments(Long id, int count);

    /**
     * 增加浏览量
     *
     * @param id    要操作的图片
     * @param count 增量
     */
    void addViews(Long id, long count);

    /**
     * 查询排行榜
     *
     * @param offset 偏移量
     * @param limit  数据条数
     * @return 图片信息
     */
    List<ImageVO> queryDailyRank(int offset, int limit);

    /**
     * 查询所有关注的用户发表的图片
     *
     * @param followedUserImageQuery 查询条件
     * @return 分页结果
     */
    Pagination<ImageVO> getFollowedUserImages(FollowedUserImageQuery followedUserImageQuery);

    /**
     * 根据关键词查询图片内容
     *
     * @param keywordsQuery 关键词以及分页信息
     * @return 图片分页信息
     */
    Pagination<ImageVO> queryImageByKeywords(KeywordsQuery keywordsQuery);

    /**
     * 工具方法：根据分页信息和查询条件查询图片分页数据
     *
     * @param page    分页数据
     * @param wrapper 查询条件
     * @return 分页结果
     */
    Pagination<ImageVO> queryImagePageInfo(Page<ImagePO> page, QueryWrapper<ImagePO> wrapper);
}
